<?php

/**
 * 用户组列表
 *
 * @author jiang
 */

namespace Kj\Admin\Controller;

use View, Scstore, Input, Redirect, Config, Auth, Lang, Response, Request, Hash, URL, Validator;
use Kj\Admin\Controller\AdminController;
use Kj\Admin\Libraries\Acl;
use Kj\Admin\Libraries\Tree;
use Kj\Admin\Models\User;
use Kj\Admin\Models\Group;
use Kj\Admin\Libraries\Js;
use Kj\Admin\Validator\Group as GroupValidator;

class GroupController extends AdminController
{
    /**
     * 用户组表模型操作对象
     *
     * @var object
     */
    protected $groupModel;
    
     /**
     * 权限操作对象
     *
     * @var object
     */
    protected $acl;

    /**
     * 初始化，实例化用户组表数据操作对象
     *
     * @access public
     */
    public function __construct()
    {
        parent::__construct();
        $this->groupModel = new Group();
        $this->acl = new Acl();
    }

    /**
     * 显示用户组列表首页
     *
     * @access public
     */
    public function index()
    {
        $list = $this->groupModel->getAllGroupByPage();
        $page = $this->groupModel->page();
        return View::make('admin/group/index')->with(compact('list', 'page'));
    }
    
    /**
     * 增加用户组
     *
     * @access public
     */
    public function add()
    {
        if(Request::method() == 'POST') return $this->_saveDatasToDatabase();
        $formUrl = U('admin/group/add');
        return View::make('admin/group/add')->with(compact('formUrl'));
    }
    
    /**
     * 增加用户组入库处理
     *
     * @access private
     */
    private function _saveDatasToDatabase()
    {
        $data = Input::get('data', false);
        
        //表单验证
        $validator = new GroupValidator();
        if( ! $validator->add($data))
        {
            return Js::error($validator->getMsg());
        }
        
        //判断有没有足够的用户组level去增加这个用户组
        if( ! $this->acl->checkGroupLevelPermission($data['level'], 'level'))
        {
            return Js::error(Lang::get('bk.account_level_deny'));
        }
        
        //开始入库
        if($this->groupModel->addGroup($data) !== false)
        {
            return Js::locate(URL::to('admin/group/index'), 'parent');
        }
        
        //入库失败
        return Js::error(Lang::get('bk.action_error'));
    }

    /**
     * 删除用户组
     *
     * @access public
     */
    public function delete()
    {
        //确保参数已经正确的传入
        $id = Input::get('id', false);
        if( ! $id ) return responseJson(Lang::get('bk.action_error'));

        //统一把ID转作为数组处理
        if( ! is_array($id)) $id = array($id);
        foreach($id as $value)
        {
            //判断有没有足够的用户组level去删除这个用户组
            if( ! $this->acl->checkGroupLevelPermission($value, false))
            {
                return responseJson(Lang::get('bk.account_level_deny'));
            }
        }
        //开始删除
        if($this->groupModel->deleteGroup($id) !== false)
        {
            return responseJson(Lang::get('bk.action_success'), true);
        }
        //删除失败
        return responseJson(Lang::get('bk.action_error'));
    }
    
    /**
     * 编辑用户组
     *
     * @access public
     */
    public function edit()
    {
        if(Request::method() == 'POST') return $this->_updateDatasToDatabase();
        //参数必须传入
        $id = Input::get('id', false);
        if( ! $id or ! is_numeric($id)) return Js::error(Lang::get('bk.illegal_operation'));
        
        //检测用户组是否存在
        $groupInfo = $this->groupModel->getOneGroupById($id);
        if(empty($groupInfo)) return Js::error(Lang::get('bk.group_not_found'));
        
        //判断有没有足够的用户组level去编辑这个用户组
        if( ! $this->acl->checkGroupLevelPermission($id, false))
        {
            return Js::error(Lang::get('bk.account_level_deny'), true);
        }
        
        //所要请求的表单
        $formUrl = U('admin/group/edit');
        
        return View::make('admin/group/add')->with(
                compact('groupInfo', 'formUrl', 'id')
            );
    }
    
    /**
     * 编辑用户组入库处理
     *
     * @access private
     */
    private function _updateDatasToDatabase()
    {
        $data = Input::get('data', false);
        //参数必须传入
        if(! $data) return Js::error(Lang::get('bk.illegal_operation'));
        //当前ID
        $id = intval($data['id']); unset($data['id']);
        
        //表单验证
        $validator = new GroupValidator();
        if( ! $validator->edit($data))
        {
            return Js::error($validator->getMsg());
        }
        
        //判断有没有足够的用户组level去编辑这个用户组
        if( ! $this->acl->checkGroupLevelPermission($data['level'], 'level'))
        {
            return Js::error(Lang::get('bk.account_level_deny'));
        }
        
        //入库
        if($this->groupModel->editGroup($data, $id) !== false)
        {
            return Js::locate(URL::to('admin/group/index'), 'parent');
        }
        return Js::error(Lang::get('bk.action_error'));
    }

}